package com.stq.toutiao.api;

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.stq.toutiao.model.request.TouTiaoAccessTokenParam;
import com.stq.toutiao.model.response.TouTiaoAccessToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

import static com.stq.toutiao.config.TouTiaoUrlConfig.GETACCESSTOKEN_URL;
import static com.stq.toutiao.model.response.TouTiaoErrCodeEnum.ERRCODE_NEGATIVE_1;
import static com.stq.toutiao.model.response.TouTiaoErrCodeEnum.ERRCODE_NEGATIVE_2;

/**
 * access_token 是小程序的全局唯一调用凭据，开发者调用小程序支付时需要使用 access_token。<br/>
 * access_token 的有效期为 2 个小时，<br/>
 * 需要定时刷新 access_token，重复获取会导致之前一次获取的 access_token 的有效期缩短为 5 分钟。<br/>
 *
 * @author stqsht@163.com
 * @date 2020-01-23 15:16
 */
public class TouTiaoAccessTokenApi {
    private Logger log = LoggerFactory.getLogger(TouTiaoAccessTokenApi.class);

    /**
     * 获取小程序的全局唯一调用凭据
     *
     * @param param
     * @return 1）accessToken：获取的 access_token <br/>
     * 2)expiresIn:access_token 有效时间，单位：秒<br/>
     */
    public static TouTiaoAccessToken getAccessToken(TouTiaoAccessTokenParam param) {

        if (StrUtil.isEmpty(param.getAppid()) || StrUtil.isEmpty(param.getSecret())) {
            return new TouTiaoAccessToken(ERRCODE_NEGATIVE_2.getErrcode(), ERRCODE_NEGATIVE_2.getErrmsg());
        }
        if (StrUtil.isEmpty(param.getGrantType()) || !StrUtil.equals(param.getGrantType(), "client_credential")) {
            param.setGrantType("client_credential");
        }
        Map<String, Object> requestParams = new HashMap<String, Object>();
        requestParams.put("appid", param.getAppid());
        requestParams.put("secret", param.getSecret());
        requestParams.put("grant_type", param.getGrantType());
        String s = HttpUtil.get(GETACCESSTOKEN_URL, requestParams);
        if (StrUtil.isEmpty(s)) {
            return new TouTiaoAccessToken(ERRCODE_NEGATIVE_1.getErrcode(), ERRCODE_NEGATIVE_1.getErrmsg());
        }
        return JSONObject.parseObject(s, TouTiaoAccessToken.class);
    }


}
